package tech.aistar.day05;

/**
 * 本类用来演示:
 *
 * @author: success
 * @date: 2022/7/22 1:59 下午
 */
public class AnimalTest {
    public static void main(String[] args) {
        //创建一个Animal数组
        Animal[] animals = new Animal[2];

        //多态的语法
        Animal dog = new Dog("旺财",15,100.0d);

        //instanceof - 类型的检测
        System.out.println(dog instanceof Dog);//true
        System.out.println(dog instanceof Animal);//true
        System.out.println(dog instanceof Cat);//false

        Animal cat = new Cat("咪咪",10,100.0d);

        //如果需要调用Cat中特有的成员.编译时类型转换成Cat
        //此处需要进行强制类型转换
        //Cat c = (Cat)cat;
        //c.catchMouse();


        animals[0] = dog;
        animals[1] = cat;

        for (Animal animal : animals) {
            animal.spark();//共性的

            //java.lang.ClassCastException

            //特性的
            if(animal instanceof Dog) {
                Dog d = (Dog) animal;
                d.watchDoor();
            }

            //转换ok的前提,instanceof->true
            if(animal instanceof Cat) {
                Cat c = (Cat) animal;
                c.catchMouse();
            }
        }

        System.out.println("===static方法===");
        //静态方法也是允许使用对象进行调用的.
        //cat的编译时类型是Animal

        //没有多态
        cat.testStatic();//父类中的static...
    }
}
